package case3

import (
	"fmt"
	"gorm.io/driver/mysql"
	"gorm.io/gorm"
	"gorm.io/gorm/schema"
)

func Test() {
	fmt.Println("🎯示例三：定义模型并让Gorm为其创建对应的数据表,使用表结构名")

	db := mysqlConnect()
	fmt.Println(db)

	// 自动创建表结构，不要带s 就是用表名
	err := db.AutoMigrate(&Dogv3{})
	if err != nil {
		fmt.Println("创建表结构失败：", err)
		return
	}

	fmt.Println("创建表结构成功...")
}

// 初始化连接
func mysqlConnect() *gorm.DB {
	// 连接字符串
	var url string = "root:123456@tcp(127.0.0.1:3306)/case1?charset=utf8mb4&parseTime=True&loc=Local"
	// 通过设置 SingularTable: true，GORM 将使用单数形式作为默认的表名。
	db, err := gorm.Open(mysql.Open(url), &gorm.Config{
		NamingStrategy: schema.NamingStrategy{
			SingularTable: true,
		},
	})
	if err != nil {
		fmt.Println("连接失败...")
	}
	fmt.Println("连接成功...")
	return db
}

// 定义表结构模型
type Dogv3 struct {
	ID       int64  `gorm:"primarykey;"`
	UserName string `gorm:"type:varchar(50);not null"` // 默认：驼峰转下划线_
	Sex      bool   `gorm:"type:tinyint(1);"`
	Age      int    `gorm:"type:int(11);"`
}
